本文叙述了由本人独立研发的机器学习框架,用于物体检测。之前的一篇关于adaboost的文章,纯粹是学习笔录,本文是一篇关于个人实用技术的推广。
adaboost 是一套传统的机器学习框架,目前可实用的检测方法都是基于adaboost方法。real adaboost 是adaboost的一个分支,实时性较强。整套框架的组成依然是,弱分类器组合形成强分类器,强分类器根据召回率和精度按次序级联,形成最终的物体分类器,通过滑动窗口,图像金字塔对图像进行物体检测工作。
弱分类是一种二值分类器,提取像素区块差。所谓像素区块差是在检测窗口内,找出两个宽度和高度相等,但是不重叠的图像块,计算块内像素灰度和值,然后两个值做差。二分方法采用最大熵。
real adaboost的强分类器是一棵满二叉树。二叉树的非叶节点是一个弱分类器,二叉树的叶节点用于保存一个置信度,样本走到哪个叶节点就加上该节点保存的置信度,每棵决策树对应一个置信度阈值,用于过滤负样本,阈值由召回率确定。另外样本的权重需由置信度来计算。具体请参考,real adaboost方法的详细介绍。
最后的检测器是由多棵决策是组成,当判断样本时,先用精度低的强分类器判断,再用精度高的强分类器判断。需要注意的是训练样本权值最开始都是一样的,随着强分类器的增多,样本权值变化很大,为了防止最高和最低之间权值倍数过高,需训练到一定数量时对样本权值进行重置。
目前训练了关于人脸的模型,检测范围是图像短边的0.1~0.9,滑动距离为窗口大小的0.1,尺度数量为20,速度在20ms左右。效果如图所示: